/**
 ************************************************************************************************************
 * Utilities for acessing system functionalities
 ************************************************************************************************************
 * @file RBSystem.h
 ************************************************************************************************************/

#ifndef __RBSYSTEM__H__
#define __RBSYSTEM__H__

#ifdef  HEADER_ONCE
#pragma HEADER_ONCE
#endif

#ifdef  HEADER_MSG
#pragma HEADER_MSG(RBSystem.h)
#endif

/************************************************************************************************************
 * Includes
 ************************************************************************************************************/
#include "RBString.h"

/************************************************************************************************************
 * Forward declarations
 ************************************************************************************************************/

/************************************************************************************************************
 * Class
 ************************************************************************************************************/

namespace RBSystem
{
    static const uint32 RB_RAND_MAX = 0x7fff;

    void    GetCursorPos    (int32& x, int32& y);
    void    SetCursorPos    (int32 x, int32 y);
    void    Sleep           (int32 ms);
    uint32  Rand            ();
    
    void    SetCapture      (void* pWindow);
    void    ReleaseCapture  ();


    namespace File
    {
        class FileIterator;
        bool Exists         (const RBString& strFile);
        void ParseDirectory (const RBString& strDir, const FileIterator& iter, const RBString& strFilter = "*");

        class FileIterator 
        {
        public:

            FileIterator(bool bRecurse = true) : m_bRecurse(bRecurse) {}

            // Callback called on file
            virtual void OnFile(const RBString& strName) = 0;

            // Callback called on direcories: returns true if you want to explore the sub-directory
            virtual bool OnDir(const RBString& ) { return m_bRecurse; }
        protected:
            bool m_bRecurse;
        };

    }
};

/************************************************************************************************************/

#endif // __RBSYSTEM__H__
